估计是一次终生难忘的Rust面试
427 人赞同了该文章
面试官很强, 也很有耐心, 整场下来学习到很多东西。
- 闲聊环节
- 笔试题: 线程池 (基本的逻辑 + 能理解 Trait Object, Dynamic Dispatch)
我刚开始的思路用channel做, 踩了静态分发的坑,?sized让我IDE一直红, 心态小崩。
还是对泛型和Trait Object理解不深, 平时养成了"能用就行"的习惯, 没有考虑泛化,抽象。 - 面试官讲解: Async Rust(Tokio)里的task以及
spawn()做抽象的思路,
和笔试题里面pub trait Job: 'static + Send + FnOnce() {}类似。 - LSM-Tree 项目中有用到线程池吗?
- LSM-Tree项目中 哪些环节 可以用后台线程池提高并发度?
- LSM-Tree项目中的 Batch优化 怎么做的? 刷盘的时机是怎么选的?
- 如果我对在同一个Batch里面对同一个key进行
put和del(),会抵消吗? - LSM-Tree项目中写文件(磁盘)有优化吗?
- Compaction 过程如何提高并发度?
- 多个线程同时做Compaction会不会压缩到同样的文件造成冲突?
反问环节
- 一个优秀的Rust工程师该有的技术栈/技能资质
(面试官:最基本的还是一个开发所需要具备的技能, 不拘泥于语言)
①语言基础: 官方书籍涵盖了很多主题了, 完整看下来就基础了。
②工程方面: 对技术有兴趣,某个点肯深入钻研,然后得动手自己多去试。 - 面试下来, 我可以提高的点
①并发编程可以提高,多开阔视野些。面试官讲的思路:
比如要拓展LSM-Tree项目, 可以增加对 Redis协议 的支持和Async异步调用方法。
做成一个K-v Server, 另外可以把数据底座迁移到 OSS对象存储 上, 做成一个对外服务。
②自己要有技术沉淀,比如线程池有些crates实现了,有些就几百行,可以多学多看。
然后自己一定要多动手写。(ps: 我自己还是写的太少了, 哎!) - 问面试官每天学习新技术的情况/动机
基于业务/场景挑战会学新知识, 然后每天用到的库会去看源码。
其余时间: 写文档(很重要), 写代码, review代码.
意料之外 的环节:
面试官插问: 之前看你的Github账号有给我们项目提过一个PR,对吧?
我: 您怎么知道的? (ps:我当时在大三上的期末,懒得复习课内知识, 想找点开源项目玩
就看到这个项目很有意思, 然后几天之内试着提了一个PR, 里面的mentor给了我反馈意见,
但我考完试之后 回家就想着玩去了, 这个PR最后没合进去。我当时已经蚌埠住了...)
面试官: 我看了你的Github账号, 我们这边有历史记录的哈, 后面怎么没继续推进下去呢?
我: (⊙﹏⊙), 我感觉我重构的那部分对我来说还是有点复杂, 想多沉淀下再来挑战。
面试官: 你如果遇到问题可以直接跟我们交流的, 会有人及时应答的。
我: 好的.. [ 惨痛教训:以后玩开源提PR, 要有 慎重如始 的意识, 不要半途跑路了...]
发布于 2024-05-27 21:19・浙江面试阿里千问AI,办公提效小助手
[
基于Qwen大模型,千问PC端适配多场景,支持文档处理、翻译、PPT生成等。多窗口同步操作,智能升级无门槛,工...